package com.sheng.leetcode.year2023.month05.day05;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2023/05/05
 * <p>
 * 2432. 处理用时最长的那个任务的员工<p>
 * <p>
 * 共有 n 位员工，每位员工都有一个从 0 到 n - 1 的唯一 id 。<p>
 * 给你一个二维整数数组 logs ，其中 logs[i] = [idi, leaveTimei] ：<p>
 * idi 是处理第 i 个任务的员工的 id ，且<p>
 * leaveTimei 是员工完成第 i 个任务的时刻。所有 leaveTimei 的值都是 唯一 的。<p>
 * 注意，第 i 个任务在第 (i - 1) 个任务结束后立即开始，且第 0 个任务从时刻 0 开始。<p>
 * 返回处理用时最长的那个任务的员工的 id 。如果存在两个或多个员工同时满足，则返回几人中 最小 的 id 。<p>
 * <p>
 * 示例 1：<p>
 * 输入：n = 10, logs = [[0,3],[2,5],[0,9],[1,15]]<p>
 * 输出：1<p>
 * 解释：<p>
 * 任务 0 于时刻 0 开始，且在时刻 3 结束，共计 3 个单位时间。<p>
 * 任务 1 于时刻 3 开始，且在时刻 5 结束，共计 2 个单位时间。<p>
 * 任务 2 于时刻 5 开始，且在时刻 9 结束，共计 4 个单位时间。<p>
 * 任务 3 于时刻 9 开始，且在时刻 15 结束，共计 6 个单位时间。<p>
 * 时间最长的任务是任务 3 ，而 id 为 1 的员工是处理此任务的员工，所以返回 1 。<p>
 * <p>
 * 示例 2：<p>
 * 输入：n = 26, logs = [[1,1],[3,7],[2,12],[7,17]]<p>
 * 输出：3<p>
 * 解释：<p>
 * 任务 0 于时刻 0 开始，且在时刻 1 结束，共计 1 个单位时间。<p>
 * 任务 1 于时刻 1 开始，且在时刻 7 结束，共计 6 个单位时间。<p>
 * 任务 2 于时刻 7 开始，且在时刻 12 结束，共计 5 个单位时间。<p>
 * 任务 3 于时刻 12 开始，且在时刻 17 结束，共计 5 个单位时间。<p>
 * 时间最长的任务是任务 1 ，而 id 为 3 的员工是处理此任务的员工，所以返回 3 。<p>
 * <p>
 * 示例 3：<p>
 * 输入：n = 2, logs = [[0,10],[1,20]]<p>
 * 输出：0<p>
 * 解释：<p>
 * 任务 0 于时刻 0 开始，且在时刻 10 结束，共计 10 个单位时间。<p>
 * 任务 1 于时刻 10 开始，且在时刻 20 结束，共计 10 个单位时间。<p>
 * 时间最长的任务是任务 0 和 1 ，处理这两个任务的员工的 id 分别是 0 和 1 ，所以返回最小的 0 。<p>
 * <p>
 * 提示：<p>
 * 2 <= n <= 500<p>
 * 1 <= logs.length <= 500<p>
 * logs[i].length == 2<p>
 * 0 <= idi <= n - 1<p>
 * 1 <= leaveTimei <= 500<p>
 * idi != idi + 1<p>
 * leaveTimei 按严格递增顺序排列<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/the-employee-that-worked-on-the-longest-task">2432. 处理用时最长的那个任务的员工</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2432 {

    @Test
    public void test01() {
//        int n = 10;
//        int[][] logs = {{0, 3}, {2, 5}, {0, 9}, {1, 15}};
//        int n = 26;
//        int[][] logs = {{1, 1}, {3, 7}, {2, 12}, {7, 17}};
        int n = 2;
        int[][] logs = {{0, 10}, {1, 20}};
        System.out.println(new Solution().hardestWorker(n, logs));
    }
}

class Solution {
    public int hardestWorker(int n, int[][] logs) {
        int index = logs[0][0];
        int time = logs[0][1];
        for (int i = 1; i < logs.length; i++) {
            if (logs[i][1] - logs[i - 1][1] > time || (logs[i][1] - logs[i - 1][1] == time && logs[i][0] < index)) {
                index = logs[i][0];
                time = logs[i][1] - logs[i - 1][1];
            }
        }
        return index;
    }
}
